Ce cours vise à vous fournir les compétences nécessaires pour
créer des visualisations de données percutantes et informatives en
utilisant la bibliothèque ggplot2 de R. Que vous soyez un
analyste de données, un scientifique de données, ou simplement quelqu’un
d’intéressé par la data science, ce cours vous aidera à transformer vos
données en insights visuels compréhensibles.
La visualisation de données est essentielle dans le monde d’aujourd’hui.
ggplot2?ggplot2: Un Outil Puissant pour la
Visualisation de Données
ggplot2
est une bibliothèque R largement utilisée pour la création de
visualisations de données de haute qualité.ggplot2 utilise les concepts de la “grammaire de la
graphique”, une approche systématique pour construire des graphiques en
couches.À la fin de ce cours, vous serez capable de :
ggplot2 pour créer une variété de
graphiques.Contenu du Cours : - Démonstrations - Exercices
Chaque graphique utilise ggplot()pour initialiser
l’objet ggplot et spécifie la source de données (data) et l’aesthetic
mapping (aes) qui définit quelles variables sont utilisées sur les axes
x et y, ainsi que d’autres paramètres esthétiques tels que la couleur,
la taille, etc.
library(tidyverse)
## -- Attaching core tidyverse packages ------------------------ tidyverse 2.0.0 --
## v dplyr 1.1.2 v readr 2.1.4
## v forcats 1.0.0 v stringr 1.5.0
## v ggplot2 3.4.3 v tibble 3.2.1
## v lubridate 1.9.2 v tidyr 1.3.0
## v purrr 1.0.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag() masks stats::lag()
## i Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
head(diamonds)
ggplot(data = diamonds, aes(x = cut)) +
geom_bar()
ggplot(data = diamonds, aes(x = carat)) +
geom_histogram(binwidth = 0.1)
ggplot(data = diamonds, aes(x = carat, y = price)) +
geom_point()
ggplot(data = diamonds, aes(x = carat, y = price)) +
geom_jitter()
data <- data.frame(
Group = rep(c("A", "B", "C"), each = 100),
Value = rnorm(300)
)
# Créez un boxplot en utilisant ggplot2
ggplot(data, aes(x = Group, y = Value)) +
geom_boxplot()
diamonds %>%
group_by(carat) %>%
summarise(mean_price = mean(price)) %>%
ggplot(aes(x = carat, y = mean_price)) +
geom_line()
ggplot2 est un système de création de graphiques
pour R, basé sur la grammaire des graphiques. Il permet de créer des
graphiques complexes en assemblant des éléments de base de manière
intuitive.
# Barplot des Diamants par Qualité de Coupe
?scale_fill_brewer()
## starting httpd help server ... done
ggplot(data = diamonds, aes(x = cut, fill = cut)) +
geom_bar() +
labs(title = "Distribution des Diamants par Qualité de Coupe",
x = "Qualité de la Coupe",
y = "Nombre de Diamants") +
scale_fill_brewer(palette = "Set1", guide = 'none') +
theme_minimal()
ggplot(data = diamonds, aes(x = cut, fill = cut)):
Initialise un graphique avec les données diamonds, avec
cut comme axe x et couleur.geom_bar(): Ajoute des barres au
graphique.labs(): Définit le titre et les étiquettes des
axes.scale_fill_brewer(): Personnalise les couleurs des
barres.theme_minimal(): Utilise un thème minimaliste pour
le graphique.ggplot(data = diamonds, aes(x = carat, y = price, color = clarity)) +
geom_point() +
labs(title = "Relation entre le Poids et le Prix des Diamants",
x = "Carats",
y = "Prix (USD)",
color = "Clarté") +
scale_color_brewer(type = "seq", palette = "Blues") +
theme_classic() +
theme(
axis.title = element_text(colour = "blue", face = "bold"),
plot.title = element_text(colour = "blue", face = "bold"),
plot.subtitle = element_text(colour = "blue", face = "bold"))
clarity) pour colorer les
points.scale_color_brewer(): Applique une palette de
couleurs.theme_classic(): Utilise un thème
classique.theme(): Personnalise davantage les éléments du
graphique.# Utilisation de `theme_set`
theme_set(theme_bw() + theme(
axis.title = element_text(colour = "blue", face = "bold"),
plot.title = element_text(colour = "blue", face = "bold"),
plot.subtitle = element_text(colour = "blue", face = "bold")))
# Différence entre Setting et Mapping
# gauche : setting
ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point(shape = 10)
# droite : mapping
ggplot(mpg, aes(x = displ, y = hwy, shape = drv)) +
geom_point()
setting) et mapper une propriété à une variable
(mapping).# Plusieurs façons de modifier les couleurs et les thèmes
p <- ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point()
p <- p + geom_point(color = "red")
p <- p + aes(color = drv)
p <- p + aes(color = cty > 20)
p + theme_bw()
p + xlim(0, 8) + ylim(0, 40)
## Warning: Removed 3 rows containing missing values (`geom_point()`).
## Removed 3 rows containing missing values (`geom_point()`).
p
theme_bw(),
xlim(), ylim(),
scale_x_continuous(), et scale_y_continuous()
pour personnaliser le graphique.ggplot(mpg, aes(x = displ, y = hwy)) +
geom_point() +
scale_x_continuous(breaks = seq(0, 10, 1)) +
scale_y_continuous(labels = scales::comma_format(scale = 1e-4)) +
theme(axis.text.x = element_text(size = 10, color = "blue"),
axis.text.y = element_text(size = 12, color = "green"))
babynamesbabynames, et viridis utilisées pour les
données, et les palettes de couleurs, respectivement.babynames et filtrage par
sexe.ggplot() initialise le graphique.geom_area() crée des graphiques à aire.scale_fill_viridis() applique une palette de
couleurs.theme() et theme_ipsum() sont utilisés
pour personnaliser l’apparence du graphique.facet_wrap(~name, scale="free_y") divise le
graphique en plusieurs panneaux, un pour chaque nom, avec des échelles y
libres.Ce script crée un graphique qui montre la popularité de certains prénoms américains au fil du temps.
library(babynames)
library(viridis)
## Loading required package: viridisLite
# Load dataset from github
data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/3_TwoNumOrdered.csv", header=T)
data$date <- as.Date(data$date)
# Load dataset from github
don <- babynames %>%
filter(name %in% c("Ashley", "Amanda", "Mary", "Deborah",
"Dorothy", "Betty", "Helen", "Jennifer", "Shirley")) %>%
filter(sex=="F")
# Plot
don %>%
ggplot( aes(x=year, y=n, group=name, fill=name)) +
geom_area() +
scale_fill_viridis(discrete = TRUE) +
theme(legend.position="none") +
ggtitle("Popularity of American names in the previous 30 years") +
theme(
legend.position="none",
panel.spacing = unit(0, "lines"),
strip.text.x = element_text(size = 8),
plot.title = element_text(size=13)
) +
facet_wrap(~name, scale="free_y")
date est convertie au format Date.ggplot() initialise le graphique.geom_line() et geom_point() sont
utilisés pour créer un graphique linéaire avec des points mis en
évidence.theme_ipsum() avec
base_family = "Arial" applique un thème avec une police
standard.ggtitle() ajoute un titre au graphique.Ce script montre l’évolution récente du prix du bitcoin.
data <- read.table("https://raw.githubusercontent.com/holtzy/data_to_viz/master/Example_dataset/3_TwoNumOrdered.csv", header=T)
data$date <- as.Date(data$date)
# Plot
data %>%
tail(1000) %>%
ggplot( aes(x=date, y=value)) +
geom_line( color="grey") +
geom_point(shape=21, color="black", fill="#69b3a2", size=6) +
ggtitle("Evolution of bitcoin price")
leaflet# Installer et charger le package leaflet
if (!require(leaflet)) {
install.packages("leaflet")
}
## Loading required package: leaflet
library(leaflet)
# Créer une carte de base
map <- leaflet() %>%
addTiles() # Ajoute les tuiles de base d'OpenStreetMap
# Ajouter un marqueur
map <- map %>%
addMarkers(lng = -0.09, lat = 51.50, popup = "The marker is placed at London")
# Changer le fond de carte
map <- map %>%
addProviderTiles(providers$Stamen.TonerLite)
# Données pour les marqueurs supplémentaires
data <- data.frame(
lng = c(-0.09, -0.11, -0.12),
lat = c(51.50, 51.52, 51.48),
label = c("Point 1", "Point 2", "Point 3")
)
# Ajouter des marqueurs supplémentaires
map <- map %>%
addMarkers(data = data, ~lng, ~lat, popup = ~label)
# Afficher la carte
map
Paris <- c(2.351462,48.8567)
m2 <- leaflet() %>% setView(lng = Paris[1], lat = Paris[2], zoom = 12) %>%
addTiles()
m2 %>% addProviderTiles("Stamen.Toner")
content <- paste(sep = "<br/>",
"<b><a href='https://www.intelligence-artificielle-school.com/ecole/nos-campus/toulouse/'>IA School - Toulouse</a></b>",
"2 Bd de Strasbourg",
"31000 Toulouse"
)
leaflet() %>%
addTiles() %>%
addPopups(1.4485130539619018, 43.60676750775245,
content, options = popupOptions(closeButton = FALSE)
)
# Chargement des bibliothèques nécessaires
library(plotly)
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
library(tidyverse)
library(lubridate)
# Configurer la graine aléatoire pour la reproductibilité
set.seed(123)
# Créer une séquence de dates (chaque mois de 2020)
dates <- seq(ymd("2020-01-01"), ymd("2020-12-31"), by="month")
# Codes d'état des États-Unis (exemple avec 5 états)
state_codes <- c("AL", "AK", "AZ", "AR", "CA")
# Générer des données aléatoires
num_rows <- length(dates) * length(state_codes)
df <- data.frame(
time = rep(dates, each=length(state_codes)),
state_code = rep(state_codes, times=length(dates)),
num_colonies = sample(100:10000, num_rows, replace = TRUE),
percent_lost = runif(num_rows, 0, 100),
varroa_mites = runif(num_rows, 0, 100),
other_pests = runif(num_rows, 0, 100),
diseases = runif(num_rows, 0, 100),
pesticides = runif(num_rows, 0, 100),
other = runif(num_rows, 0, 100),
unknown = runif(num_rows, 0, 100)
)
# Afficher les premières lignes du dataframe
head(df)
fig <- df %>%
plot_ly() %>%
add_trace(
type = "choropleth",
locations = ~state_code,
locationmode = "USA-states",
z = ~varroa_mites,
colorscale = "Viridis_r",
color = ~varroa_mites
) %>%
layout(
geo = list(scope = "usa"),
frame = ~time
)
fig
## Warning: 'layout' objects don't have these attributes: 'frame'
## Valid attributes include:
## '_deprecated', 'activeshape', 'annotations', 'autosize', 'autotypenumbers', 'calendar', 'clickmode', 'coloraxis', 'colorscale', 'colorway', 'computed', 'datarevision', 'dragmode', 'editrevision', 'editType', 'font', 'geo', 'grid', 'height', 'hidesources', 'hoverdistance', 'hoverlabel', 'hovermode', 'images', 'legend', 'mapbox', 'margin', 'meta', 'metasrc', 'modebar', 'newshape', 'paper_bgcolor', 'plot_bgcolor', 'polar', 'scene', 'selectdirection', 'selectionrevision', 'separators', 'shapes', 'showlegend', 'sliders', 'smith', 'spikedistance', 'template', 'ternary', 'title', 'transition', 'uirevision', 'uniformtext', 'updatemenus', 'width', 'xaxis', 'yaxis', 'barmode', 'bargap', 'mapType'
Pour en savoir plus : (data to viz)[https://www.data-to-viz.com/]
Pour commencer à pratiquer, suivez ces étapes :
Accédez au Dépôt GitHub : Visitez l’URL fournie : https://github.com/universdesdonnees/Introduction-a-R pour accéder au dépôt GitHub contenant les matériaux du cours.
Trouvez le Fichier des Exercices : Dans le dépôt, localisez le fichier nommé exercices7.txt. Ce fichier contient les premiers exercices que vous devez pratiquer.
Lisez et Essayez de Résoudre les Exercices : Ouvrez le fichier exercices7.txt et lisez attentivement les exercices. Essayez de les résoudre par vous-même dans votre environnement R (comme RStudio). Il est important de pratiquer par vous-même avant de regarder les solutions pour mieux apprendre.
Consultez la Correction : Une fois que vous avez tenté de résoudre les exercices, ou si vous rencontrez des difficultés, consultez le fichier correction_exercices7.R pour voir les solutions. Analysez les solutions pour comprendre les méthodes et logiques utilisées.